"""
文件编码：
    1、文件编码：是一个规则集合，记录内容和二进制间进行相互交互的逻辑
    2、常用文件编码：UTF-8
    3、为何使用编码：因计算机只认识0和1，需要将内容编译成0和1才能存储在计算机种
文件打开：
    1、使用open函数打开一个文件，返回一个文件对象，若以只读方式打开不存在文件会报错，若以写入方式打开不存在文件，会自动创建一个文件
    2、语法格式1：
        f = open(name, mode, encoding)
        // f 接收返回的文件对象
        // name是要打开的文件名称（包含路径）
        // mode是访问模式（只读、写入、追加）
        // encoding是编码格式，一般值都为UTF-8
    3、mode：文件访问模式
        （1）r ：只读模式，只能读取文件内容，该模式下打开不存在文件会报错
        （2）w ：写入模式，可以向文件内写入内容，该模式下打开不存在文件会创建新文件，写入时会覆盖文件原有内容
        （3）a ：追加模式，在文件最后追加新内容，该模式下打开不存在文件会创建新文件，写入时是在文件末尾追加内容
        （4）rb ：二进制模式打开文件

文件对象读取时常用方法：
    1、读取文件中前num个字符： f.read(num)     // 不写num默认读取全部内容
    2、每次读取一行： f.readline()
    3、将文件按照行数以列表形式读取出来，得到一个列表数据： f.readlines()
    4、关闭文件： f.close()
    5、自动关闭文件：
        with open(name,mode,encoding) as f:
            文件操作内容
    6、for循环，逐行读取文件：
        for line in f:
            逐行读取文件的内容
文件对象写入时常用方法：
    1、向文件对象写入内容：f.write()        // ，存入缓存中，会将文件中的原有的内容覆盖
    2、将缓存中写入的内容写进文件中：f.flush()
    3、关闭文件：f.close()         //close内置了flush的功能，写了colse可以不用写flush

"""

# ----------------------文件读写
# f = open("test1.txt", "r", encoding="UTF-8")    # 读取文件 同目录下可以不用写路径
# print(f"文件对象f是：{type(f)} 类型")      # <class '_io.TextIOWrapper'>
# print(f"读取文件里面的前n（10）个字符，输出结果为：{f.read(10)}")      # read(num)方法，读取文件前num个字符
# print(f"逐行读取，读取文件第一行内容，输出结果为：{f.readline()}")       # readline()方法，每次读取一行
# print(f"逐行读取，读取文件第二行内容，输出结果为：{f.readline()}")
# print(f"将文件内容按照行数以列表形式读取出来，输出结果为：{f.readlines()}")       # readlines()方法，将文件内容按照行数以列表形式读取出来，得到列表数据

# for line in f:      # for循环返回每一行数据
#     print(f"for循环，每次读取一行内容，输出结果为：{line}")
# f.close()     # 关闭文件，释放文件
#
# with open("E:/test2.txt","r",encoding="UTF-8") as f:      # 读取文件 不同目录下可以需要写完整路径，自动释放文件
#     for line in f:  # for循环返回每一行数据
#         print(f"for循环，每次读取一行内容，输出结果为：{line}")

# --------练习 统计words文件中 猫猫同学出现的次数
# with open("words.txt","r",encoding="UTF-8") as f:
#     # print(f"words文件中的内容是：{f.read()}")
#     str_sum = 0
#     for line in f:      # 相当于 f.readline()
#         line.strip("\n")
#         num = line.count("猫猫同学")
#         str_sum += num
#     print(f"猫猫同学一共出现了：{str_sum}次")

# f = open("test3.txt", "r", encoding="UTF-8")     # r模式打开不存在的文件会报错
# f = open("test3.txt", "w", encoding="UTF-8")       # w模式打开不存在的文件不会报错，会自动创建文件
# f.write("爱睡懒觉的猫猫")        # 此时还没有将内容写入文件中，而是写在缓存中
# f.flush()        # 将缓存中写入的内容更新到文件中
# f.close()       # 需要关闭打开的文件
#
# with open("test3.txt", "a", encoding="UTF-8") as f:     # a模式下，是在文件末尾追加新的内容
#     f.write("\n爱吃的猫猫不会瘦")

#  ---------------文件综合练习
# f_r = open("bill.txt", "r", encoding="UTF-8")
# f_w = open("bill_bak.txt", "a", encoding="UTF-8")
# for l in f_r:
#     line = l.strip("\n")     # 去除字符串首尾的空格和换行符
#     result = line.split(".")       # 将字符串根据“.”进行分割，得到新的列表
#     if result[-1] == "测试":
#         continue
#     else:
#         f_w.write(l)      # 将内容写入新的文件中
# f_r.close()     # 关闭文件
# f_w.close()     # 关闭文件
